package com.sgcc.pda.sdk.dao;

import android.content.Context;

import com.sgcc.pda.baselibrary.exception.ExceptionInfo;
import com.sgcc.pda.greendao.entity.AppBaseInfo;
import com.sgcc.pda.sdk.entity.BehaviorTrajectoryInfo;
import com.sgcc.pda.sdk.entity.DataBean;
import com.sgcc.pda.sdk.entity.MsgOfflineInfo;
import com.sgcc.pda.sdk.entity.TaskUpInfo;
import com.sgcc.pda.sdk.entity.TrafficStatsInfo;
import com.sgcc.pda.sdk.entity.table.AppApkInfo;
import com.sgcc.pda.sdk.entity.table.BaseTaskInfo;
import com.sgcc.pda.sdk.entity.table.FileInfo;
import com.sgcc.pda.sdk.entity.table.RegisterInfo;
import com.sgcc.pda.sdk.entity.table.SharepreferenceInfo;
import com.sgcc.pda.sdk.entity.table.UserInfo;

import java.util.ArrayList;
import java.util.List;

/**
 * 内容提供者数据库操作.
 *
 * @author 王沛栋
 * @data 2018/1/19 14:17
 */

public interface ContentProviderDao {
    void setSharepreference(Context context, SharepreferenceInfo obj);

    String getSharepreferenceValue(Context context, String editKey, String key);

    boolean getSharepreferenceBooleanValue(Context context, String editKey, String key);

    void saveExceptionInfo(Context context, ExceptionInfo obj);

    List<ExceptionInfo> getExceptionInfoList(Context context);

    void saveAppBaseInfo(Context context, AppBaseInfo info);

    /**
     * 获取应用分类
     *
     * @param context
     * @return
     */
    List<AppBaseInfo> getAppTypeList(Context context);

    List<AppBaseInfo> getAppBaseInfoList(Context context);

    List<AppBaseInfo> getAppBaseInfoListBySearchAppName(Context context, String name);


    FileInfo getFileInfo(Context context, String fileNo);

    void saveFileInfo(Context context, FileInfo info);

    /**
     * 保存注册信息
     *
     * @param context
     * @param info
     */
    void saveRegisterInfo(Context context, RegisterInfo info);

    boolean deleteRegisterInfo(Context context);

    RegisterInfo getRegisterInfo(Context context);


    /**
     * 保存掌机使用人列表
     *
     * @param context
     * @param str
     */
    void saveUserInfoList(Context context, String str);


    List<UserInfo.User> getUserInfoList(Context context, String key);

    boolean deleteUserInfoList(Context context);

    void saveMarketDesktopInfo(Context context, List<AppBaseInfo> list);

    /**
     * 删除桌面数据
     *
     * @param context     上下文
     * @param packageName 包名
     */
    boolean deleteMarketDesktopInfo(Context context, String packageName);

    /**
     * 获取首页最近使用APP列表
     *
     * @param context
     * @return
     */
    List<AppBaseInfo> getMarketTopInfo(Context context);

    /**
     * 获取分类桌面
     *
     * @param context
     * @param dId
     * @return
     */
    List<AppBaseInfo> getSortMarketTopInfo(Context context, String dId);

    /**
     * 修改应用apk下载的状态
     *
     * @param context
     * @param packageName
     * @param state
     * @return
     */
    boolean updateAppBaseInfoApkState(Context context,
                                      String packageName, int state);

    boolean saveOrUpdateAppApkInfoState(Context context, String packageName, int state, String progress);

    boolean saveOrUpdateAppApkInfoState(Context context, String packageName, int state, String progress, String appName);

    boolean saveAddOrUpdateAppBaseInfoState(Context context, String packageName, String addUpdate);


    AppApkInfo getAppApkInfoByPackageName(Context context, String packageName);


    boolean deletAppBaseInfo(Context context);

    boolean deletAppBaseInfoByAppNo(Context context, String appNo);

    void saveOrUpdateBaseTaskInfo(Context context, List<BaseTaskInfo> list);

    /**
     * 获取基础工单信息列表
     *
     * @param context
     * @param selectArgs
     */
    List<BaseTaskInfo> getBaseTaskInfoList(Context context, String[] selectArgs);

    /**
     * 获取子应用工单个数
     */
    int getSonTaskNumInfo(Context context, String[] selectArgs);

    /**
     * 写入应用安装/卸载数据
     *
     * @param context
     * @param list
     * @param state   0安装 1卸载
     */
    void saveOrUpdateAppInstallInfoList(Context context, List<AppBaseInfo> list, int state);

    List<AppBaseInfo> getAppInstallInfoList(Context context);

    /**
     * 根据包名获取应用详情
     *
     * @param context
     * @param packageName
     * @return
     */
    AppBaseInfo getAppBaseInfoByPackageName(Context context, String packageName);


    /**
     * 查询需要合并补丁包的app信息
     *
     * @param context
     * @param addUpdate
     * @return
     */
    List<AppApkInfo> selectAppBaseInfoByAddUpdate(Context context, String addUpdate);

    /**
     * 保存多桌面数据
     *
     * @param context
     * @param mListAppBaseInfoExit
     * @param dId
     */
    void saveDesktopInfo(Context context, List<AppBaseInfo> mListAppBaseInfoExit, String dId);

    /**
     * 保存流量信息
     *
     * @param context
     */
    void saveTrafficStats(Context context, TrafficStatsInfo trafficStats);

    //获取流量信息
    List<TrafficStatsInfo> getTrafficStatsInfos(Context context);

    /**
     * 查询当月的流量信息
     *
     * @param context
     * @return
     */
    List<TrafficStatsInfo> getMonthTrafficMonitorInfos(Context context, String packageName);

    /**
     * 查询当日的流量信息
     *
     * @param context
     * @return
     */
    List<TrafficStatsInfo> getDayTrafficMonitorInfos(Context context, String packageName);

    void clearTrafficStatsInfo(Context context);

    TaskUpInfo getTaskisUp(Context context, String packageName);

    void saveTaskUpInfo(Context context, TaskUpInfo taskUpInfo);

    boolean deleteTaskUpInfo(Context context);

    /**
     * 保存工单常量
     *
     * @param context
     * @param taskConstantInfo
     */
    void saveTaskConstantInfo(Context context, String taskConstantInfo);

    /**
     * 删除工单常量信息
     *
     * @param mContext
     */
    void deleteTaskConstantInfo(Context mContext);

    /**
     * 获取工单类型/编号
     *
     * @param context
     * @return
     */
    ArrayList<DataBean> getTaskConstantInfo(Context context);

    /**
     * 保存用户行为轨迹信息
     */
    void saveBehaviorTrajectoryInfoContext(Context context, BehaviorTrajectoryInfo behaviorTrajectoryInfo);

    /**
     * 删除用户行为轨迹信息
     *
     * @param mContext
     */
    void deleteBehaviorTrajectoryInfo(Context mContext, String businessIdentification, String sonBusinessIdentification);

    /**
     * 更新用户行为轨迹
     */
    boolean updateBehaviorTrajectoryInfo(Context mContext, String id);

    /**
     * 获取行为轨迹
     *
     * @param context
     * @return
     */
    ArrayList<BehaviorTrajectoryInfo> getBehaviorTrajectoryInfo(Context context, String businessIdentification, String sonBusinessIdentification);
    /**
     * 保存离线消息
     */
    void saveMsgOffline(Context context, MsgOfflineInfo info);
    /**
     * 获取离线消息
     */
    ArrayList<MsgOfflineInfo> getMsgOffline(Context context, String topic, String time);

}
